草庐IT

C++ 对和指针

全部标签

c++ - 使用指针重新复制字符数组并修剪前导空格

我正在自学C++并正在研究这个问题:Writeafunctionnamedtrimfrnt()thatdeletesallleadingblanksfromastring.Writethefunctionusingpointerswiththereturntypevoid.下面是我对这个问题的尝试,我尝试用两种方法解决这个问题(你可以看到我的两个函数trimfrnt1()和trimfrnt2()。trimfrnt1()工作正常。我有点意外地得到了这个工作。在我编码之后,我不确定它为什么会工作。我的困惑在于for循环。我在下面绘制了msg数组的图表:||||01234567+----+-

OJ刷题:求俩个数组的交集(没学哈希表?快排双指针轻松搞定!)

目录 ​编辑 1.题目描述2.C语言中的内置排序函数(qsort)3.解题思路3.1升序3.2双指针的移动 3.3 保证加入元素的唯一性4.leetcode上的完整代码完结散花                        悟已往之不谏,知来者犹可追                            创作不易,宝子们!如果这篇文章对你们有帮助的话,别忘了给个免费的赞哟~  1.题目描述给你一个整数数组nums,其中总是存在唯一的一个最大整数。请你找出数组中的最大元素并检查它是否至少是数组中每个其他数字的两倍。如果是,则返回最大元素的下标,否则返回-1。OJ链接【leetcode题号:747

c++ - c++中带有智能指针的循环双链表

是否可以在C++中使用智能指针创建循环双向链表structNode{intval;shared_ptrnext;weak_ptrprev;};shared_ptrhead;但这将有共享指针的循环引用,因此无法正确释放。 最佳答案 使循环链表本身成为一个类(使用构建它所需的任何操作,如追加)。通过设置tail->next=nullptr让它的析构函数断开链接。断开哪个链接应该无关紧要,因此如果您不使用头部和尾部,只需将它们中的任何一个设置为nullptr,就可以了。在我的测试中,我做了一个循环链表,节点没有析构。然后在最后,我在它退出

c++ - 使用智能指针管理函数内分配的内存

背景如果我有一个函数foo如下voidfoo(std::vector&values){values=std::vector(10,1);}那么我可以称它为std::vectorvalues;foo(values);注意初始vector是空的,然后它被填充到函数foo中。我经常遇到我无法更改的接口(interface)(即第3方),其意图与上述相同,但使用原始数组,例如voidfoo(int*&values){values=newint[10];std::fill_n(values,10,1);}我的问题是现在我负责管理内存,例如int*values;foo(values);delete

c++ - 理解虚函数和指针的使用

在了解切片之后,据我所知,可以使用指向动态变量的指针来打破它。但是怎么会呢?为什么在那一点上没有切片?我想我自己,但我不确定。在ppet=pdog;赋值后,pdog指向与ppet相同的地址。不是吗?//Programtoillustrateuseofavirtualfunction//todefeattheslicingproblem.#include#includeusingnamespacestd;classPet{public:virtualvoidprint();stringname;};classDog:publicPet{public:virtualvoidprint();

c++ - 如何获得指向类的复制构造函数的成员函数指针?

有什么方法可以让成员函数指针指向类的拷贝构造函数吗?我知道如何定义和使用普通成员函数指针,但我似乎无法找到获取它的方法。 最佳答案 根据C++标准,“不得获取构造函数的地址”,因此不可能按照您的要求进行操作。但是,有一个简单的解决方法。下面的代码返回一个函数指针,指向一个创建其输入拷贝的函数。templateautoGetCopyConstructor()->obj(*)(constobj&){return+[](constobj&o){returnobj(o);};}structfoo{std::stringmsg;foo(con

c++ - 为什么我必须使用寻址运算符来获取指向成员函数的指针?

structA{voidf(){}};voidf(){}intmain(){autop1=&f;//okautop2=f;//okautop3=&A::f;//ok////error:calltonon-staticmemberfunction//withoutanobjectargument//autop4=A::f;//Whynotok?}为什么我必须使用寻址运算符来获取指向成员函数的指针? 最佳答案 autop1=&f;//okautop2=f;//ok第一个或多或少是正确的。但是因为非成员函数有implicitconvers

c# - 将指向对象的非托管 C++ 指针转换为托管 C# 对象

我有一个用C++编写的非托管静态库(.dll)://Thisisapersonalacademicproject.DearPVS-Studio,pleasecheckit.//PVS-StudioStaticCodeAnalyzerforC,C++andC#:http://www.viva64.com#include"program.h"structMyData{int32_tindex;char*name;//uint8_t*data;};extern"C"{__declspec(dllexport)MyData*GetMyData(){MyData*ms=newMyData();m

c++ - 指针上的运算符<(小于)是否一致?

注意:这个问题不是关于总顺序的。可以使用std::less获得相同类型指针的总顺序。.Accordingtothis,将两个指针与operator进行比较例如,如果它们指向不同的分配,则不允许。在什么意义上不允许?它是实现定义的、未指定的还是未定义的行为?我想我在某处读到它未指定。不需要实现来记录行为是什么,但必须有一些行为。所以这意味着,比较任意两个指针仍然是合法的,但不一定会产生总顺序。这是否意味着,当比较相同的两个指针两次时,我们仍然必须获得一致的结果?一般情况是:在应用程序中两次调用相同的未指定行为是否总是产生相同的结果?inti1,i2;int*a=&i1;int*b=&i2

c++ - 正在访问指针元组的元组和线程安全的互斥锁

给定std::tuple,usingTuple1=std::tuple>;usingTuple2=std::tuple>;std::tupletuple;还有函数,voidbaz(){autotup=std::get(tuple);std::lock_guardlk(*std::get(tup));//Dosomethingwithstd::get(tup)andstd::get(tup)}根据this关于SO访问std::tuple的问题本质上不是线程安全的,但是在示例代码的情况下呢?是否有可能发生未定义/奇怪的事情?这是假设FooN和BarN仅在锁定后才被访问。